
package edu.uoc.tdp.servidor.impl.informes;

import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.RemotInformesInterface;
import edu.uoc.tdp.bbdd.GestorDiscConnexio;
import edu.uoc.tdp.beans.informes.Universitat;
import edu.uoc.tdp.beans.proves.Prova;
import edu.uoc.tdp.servidor.bbdd.conexio.GestorUsuaris;
import edu.uoc.tdp.servidor.bbdd.informes.GestorInformes;
import java.io.Serializable;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Classe que implementa l'interfície RemotInformesInterface
 * Es definiran tots els mètodes que necessitem per fer servir a la
 * capa de presentació. Per accedir a BBDD sempre haurem de passar per 
 * la classe GestorXXX corresponent
 * @author Grup TDP 1X4J
 */
public class RemotInformesImpl extends UnicastRemoteObject 
                           implements RemotInformesInterface, Serializable    
{
    
    private static final long serialVersionUID = 1L;
    private GestorDiscConnexio gestorBD;

    /**
     * Constructor de la clase<br>
     * Crea una conexió a la Base de Dades
     * @exception RemoteException
     * @exception EOlympicsException
     */    
    public RemotInformesImpl() throws RemoteException, EOlympicsException {
        super();
        gestorBD = new GestorDiscConnexio();
        gestorBD.obreConnexioBD();
    }
    /**
     * Accessor de lectura, recupera l'id i la descripció totes les proves en estat TANCADA
     * @return LLista de proves
     * @throws RemoteException 
     */
    @Override
    public List<Prova> getProvesTancades() throws RemoteException, EOlympicsException {
            GestorInformes gestorInformes = new GestorInformes(gestorBD);
            return gestorInformes.getProvesTancades();
    }
    /**
     * Consultem els resultats filtrats per les opcions de pantalla
     * @param idUniversitat
     * @param idProva
     * @param dinscripcio_ini
     * @param dinscripcio_fi
     * @param drealitacio_ini
     * @param drealitacio_fi
     * @return
     * @throws RemoteException
     * @throws EOlympicsException 
     */
    @Override
    public ArrayList<HashMap> consultarProves(String idUniversitat, Integer idProva, Date dinscripcio_ini, Date dinscripcio_fi, Date drealitacio_ini, Date drealitacio_fi) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        ArrayList<HashMap> resultats = gestorInformes.consultarProves(idUniversitat,idProva,
                dinscripcio_ini,dinscripcio_fi,drealitacio_ini,drealitacio_fi);
        return resultats;
    }
    
    
    /**
     * Accessor de lectura, recupera l'id i la descripció totes les proves on l'usuari s'ha inscrit
     * @return LLista de proves
     * @throws RemoteException 
     */
    @Override
    public List<Prova> getMevesProves(Integer idEstudiant) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
            return gestorInformes.getMevesProves(idEstudiant);
    }

    @Override
    public ArrayList<HashMap> consultarMevesProves(String tipusProva, Integer idProva, Date dinscripcio_ini, Date dinscripcio_fi, Date drealitacio_ini, Date drealitacio_fi, Integer idEstudiant) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        ArrayList<HashMap> resultats = gestorInformes.consultarMevesProves(tipusProva,idProva,
                dinscripcio_ini,dinscripcio_fi,drealitacio_ini,drealitacio_fi,idEstudiant);
        return resultats;
    }
    /**
     * Consultem els resultats filtrats per les opcions de pantalla
     * @param tipusProva
     * @param idProva
     * @param dinscripcio_ini
     * @param dinscripcio_fi
     * @param drealitacio_ini
     * @param drealitacio_fi
     * @return
     * @throws RemoteException
     * @throws EOlympicsException 
     */
    @Override
    public ArrayList<HashMap> consultarMedaller(Universitat universitat) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        ArrayList<HashMap> resultats = gestorInformes.consultarMedaller(universitat);
        return resultats;
    }
    /**
     * Total de proves donades d’alta
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public Integer getProvasAlta() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getProvasAlta();
    }
    /**
     * Total de proves en curs
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public Integer getProvaEnCurs() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getProvaEnCurs();
    }
    /**
     * Total de proves finalitzades
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public Integer getProvaTancades() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getProvaTancades();
    }
    /**
     * Nombre d’estudiants inscrits a les proves
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public Integer getNombreInscripcions() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getNombreInscripcions();
    }
    /**
     * Mitjana d’estudiants inscrits per prova
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public BigDecimal getMitjanaInscrits() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getMitjanaInscrits();
    }
    /**
     * Total de medalles a repartir
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public Integer getMedalles() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getMedalles();
    }
    /**
     * Puntuació mitjana en les proves
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public BigDecimal getMitjanaProves() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getMitjanaProves();
    }
    /**
     * Percentatge de participació en proves
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public BigDecimal getPercentatgeParticipacio() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getPercentatgeParticipacio();
    }
    /**
     * Nombre de preguntes mitjà en les proves
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public BigDecimal getMitjanaPreguntesPerRonda() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getMitjanaPreguntesPerRonda();
    }
    /**
     * Percentatge de respostes encertades en proves
     * @return
     * @throws EOlympicsException 
     */
    @Override
    public BigDecimal getPercentantgeRespostesEncertades() throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.getPercentantgeRespostesEncertades();
    }
    /**
     * Retorna el detalla d'una prova
     * @param idProva
     * @param tipusRonda
     * @return
     * @throws RemoteException
     * @throws EOlympicsException 
     */
    @Override
    public HashMap consultarDetallProves(Integer idProva, String tipusRonda) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.consultarDetallProves(idProva,tipusRonda);
    }
     /**
     * Retorna el detalla de l'inscrpcio d'una ronda
     * @param idProva
     * @param tipusProva
     * @param idUniversitat
     * @return
     * @throws RemoteException
     * @throws EOlympicsException 
     */
    @Override
    public ArrayList<HashMap> consultarParticipacio(Integer idProva, String tipusProva, String idUniversitat,Date drealitacio_ini, Date drealitacio_fi) throws RemoteException, EOlympicsException {
        GestorInformes gestorInformes = new GestorInformes(gestorBD);
        return gestorInformes.consultarParticipacio(idProva,tipusProva,idUniversitat,drealitacio_ini,drealitacio_fi);
    }

   

    
}
